iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
自我挑戰組

轉職AI軟體工程師的自我學習分享筆記系列 第 22

Python 速算器: 基礎代謝率 (BMR)計算

  • 分享至 

  • xImage
  •  

前情提要:

經過一連串~ brain storming, debug, paper studying, writing articles, positive of covid... hahaha jk lmao /images/emoticon/emoticon37.gif/images/emoticon/emoticon39.gif

However, I realised that my health is the piority! As a life where you have the energy to focus on everything else you want and dream of.
So, let's have a break for coding some simple python games.

Those games are my first side project, which also my self-study of Python before I start the AI and Big Data program. I learned it from the "小象學堂" which is a wechat account (kinda like wechat python learning robot ?!) that I have given from my brother. (p.s. My siblings were engineer before I be an AI RD/PM... but I'm the only one, who still alive in this field/images/emoticon/emoticon02.gif ... well life is hard... it's another story~ haha LOL, let come back to the article /images/emoticon/emoticon33.gif)

https://ithelp.ithome.com.tw/upload/images/20221002/201516812Zkp2WTdNO.jpg

基礎代謝率(BMR)介紹:

基礎代謝率(BMR) 全稱為 "Basel Metabolic Rate" 指人體在休息狀態下,維持新陳代謝所需的熱量,例如:呼吸、器官運作、體溫維持等,即使整天躺著不動也會消耗的最低熱量。BMR 會隨著年紀增加或體重減輕而降低,會隨著肌肉量增加而上升。意思是身體為了要維持運作,在休息時消耗掉的熱量。基礎代謝率佔了總熱量消耗的一大部分,大約65-75%左右。BMR會影響到基礎代謝率高低的有很多,像是總體重、肌肉量、賀爾蒙、年齡等。

西元1919年Harris–Benedict equation,計算BMR主要採用身高、體重、年齡跟性別為參考依據。而到了西元1984年後有修訂過的Harris-Benedict equation方法,一直到1990年The Mifflin St Jeor Equation提出了最新的方法,根據WiKi的資料,又比Harris的方法準確度提升了5%。

BMR翻成比較簡易的說法就是你一整天什麼事都不做,一直躺在床上,要維持你身體的運作會消耗的最低能量,而基礎代謝率會隨著年齡跟體重的變化而改變>>> 年紀越大,基礎代謝率會跟著下降 >>> 體重減輕也會導致基礎代謝率下降。

https://ithelp.ithome.com.tw/upload/images/20221002/20151681PyY5VE2TT0.png

基礎代謝率(BMR)公式:

https://ithelp.ithome.com.tw/upload/images/20221002/20151681r8fJ5YSgrE.jpg

男生BMR公式:

#男生BMR
bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66

女生BMR公式:

#女生BMR
bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655

基礎代謝率(BMR)實作:

1. 基礎篇:

需在程式碼中輸入自己的 "性別, 身高, 體重, 年齡", 並執行其程式即可計算BMR值

def main():
    """
    主函數
    """
    #性別
    gender = '女' #輸入性別

    #體重(kg)
    weight = 50 #輸入體重

    #身高(cm)
    height = 160 #輸入身高

    #年齡(yr)
    age = 26 #輸入年齡

    if gender == '男':
        #男性BMR公式
        bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66
    elif gender == '女':
        #女性BMR公式
        bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
    else:
        bmr = -1

    if bmr != -1:
        print('基礎代謝率(大卡):', bmr)
    else:
        print('暫不支持該性別')

1. 結果如下圖:

https://ithelp.ithome.com.tw/upload/images/20221002/20151681X2ZRnEMjhA.png

  • 如果程式碼輸入的性別不為"女"或"男" 則會輸出"暫不支持該性別"
    https://ithelp.ithome.com.tw/upload/images/20221002/20151681cEEb8cquyX.png

2. 在終端機輸入數值計算BMR:

    1. 需在終端機數入"性別, 體重, 身高, 年齡" 計算BMR
    1. 當終端機出現"是否退出程序(y/n)?" 時, "n" 為繼續計算, "y" 則為結束程式
def main():
    """
    主函數
    """
    y_or_n = input('是否退出程序(y/n)?')

    while y_or_n != 'y':
        #性別
        gender = input('性別: ')
        #print(type(gender))

        #體重(kg)
        weight = float(input('體重(kg): '))
        #print(type(weight))

        #身高(cm)
        height = float(input('身高(cm): '))
        #print(type(height))

        #年齡(yr)
        age = int(input('年齡: '))
        #print(type(age))


        if gender == '男':
            #男性BMR公式
            bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66
        elif gender == '女':
            #女性BMR公式
            bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
        else:
            bmr = -1

        if bmr != -1:
            print('基礎代謝率(大卡):', bmr)
        else:
            print('暫不支持該性別')

        print()  #輸出空行
        y_or_n = input('是否退出程序(y/n)?')

if __name__ == "__main__":
    main()

結果如下:

https://ithelp.ithome.com.tw/upload/images/20221002/20151681EyaxZ9e629.png

3. 一次性計算BMR:

    1. 直接輸入"性別 體重(kg) 身高(cm) 年齡" 信息, 並用空格分開即可一次性計算BMR
    1. 無須等待程式輸出input 再依序填入, 可一次性填入與輸出
def main():
    """
    主函數
    """
    y_or_n = input('是否退出程序(y/n)?')

    while y_or_n != 'y':
        #性別
        gender = input('性別: ')
        #print(type(gender))

        #體重(kg)
        weight = float(input('體重(kg): '))
        #print(type(weight))

        #身高(cm)
        height = float(input('身高(cm): '))
        #print(type(height))

        #年齡(yr)
        age = int(input('年齡: '))
        #print(type(age))

        if gender == '男':
            #男性BMR公式
            bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66
        elif gender == '女':
            #女性BMR公式
            bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
        else:
            bmr = -1

        if bmr != -1:
            print('基礎代謝率(大卡):', bmr)
        else:
            print('暫不支持該性別')

        print()  #輸出空行
        y_or_n = input('是否退出程序(y/n)?')

if __name__ == "__main__":
    main()

3. 結果如下圖:

https://ithelp.ithome.com.tw/upload/images/20221002/2015168129jqT2No4y.png

如果性別沒有填"男"/"女"會跳出"暫不支持該性別", 但使用者還是可以繼續輸入訊息計算BMR
https://ithelp.ithome.com.tw/upload/images/20221002/201516811WntKzY2Ps.png

4. 一次性計算BMR + 處理異常操作:

    1. 直接輸入"性別 體重(kg) 身高(cm) 年齡" 信息, 並用空格分開即可計算BMR, 無須等待程式輸出input 再依序填入, 可一次性填入與輸出
    1. 若亂打input 的數值, 則會跳出 "請輸入正確的信息!", 以下程式碼已增加"處理使用者異常操作"的部分
def main():
    """
    主函數
    """
    y_or_n = input('是否退出程序(y/n)?')

    while y_or_n != 'y':
        print('請輸入以下信息, 用空格分裂')
        input_str = input('性別 體重(kg) 身高(cm) 年齡: ')
        str_list = input_str.split(' ')

        try:
            gender = str_list[0]
            weight = float(str_list[1])
            height = float(str_list[2])
            age = int(str_list[3])

            if gender == '男':
                # 男性BMR公式
                bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66
            elif gender == '女':
                # 女性BMR公式
                bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
            else:
                bmr = -1

            if bmr != -1:
                print('您的性別: {}, 體重: {}公斤, 身高: {}公分, 年齡: {}歲'.format(gender, weight, height, age))

                print('您的基礎代謝率: {}大卡'.format(bmr))
            else:
                print('暫不支持該性別')

        except ValueError:
            print('請輸入正確的信息!')
        except IndexError:
            print('請輸入正確的信息!')
        except:
            print('程序異常!')

        print()  #輸出空行
        y_or_n = input('是否退出程序(y/n)?')

if __name__ == "__main__":
    main()

4. 結果如下圖:

https://ithelp.ithome.com.tw/upload/images/20221002/20151681adThkUfCpG.png

/images/emoticon/emoticon42.gif


上一篇
Python 繪圖: 分型樹的繪製 (畫一大堆圖~p.s.還可以for表白用喔!)
下一篇
Python 速算器: 52週存錢挑戰
系列文
轉職AI軟體工程師的自我學習分享筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言